package Entity;

import java.math.BigDecimal;

/**
 * 商品信息表实体类（对应product表）
 * 兼容MySQL 5.7+，移除CHECK约束，单价非负由业务层保证
 */
public class Product {
    // 商品ID（自增主键，非空）
    private Integer productId;
    // 商品名称（非空，最大255字符）
    private String name;
    // 商品类目（非空，最大50字符）
    private String category;
    // 单价（非空，DECIMAL(10,2)，业务层保证非负）
    private BigDecimal price;
    // 库存（非负，UNSIGNED，默认0）
    private Integer stock;

    // 无参构造（必需）
    public Product() {}

    // Getter/Setter
    public Integer getProductId() {
        return productId;
    }

    public void setProductId(Integer productId) {
        this.productId = productId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        // 业务层保证非负，并强制2位小数（匹配DECIMAL(10,2)）
        if (price == null) {
            throw new IllegalArgumentException("price（单价）不能为null");
        }
        if (price.compareTo(BigDecimal.ZERO) < 0) {
            throw new IllegalArgumentException("price（单价）不能为负数");
        }
        this.price = price.setScale(2, BigDecimal.ROUND_HALF_UP);
    }

    public Integer getStock() {
        return stock;
    }

    public void setStock(Integer stock) {
        // 业务层保证非负（适配UNSIGNED），默认0
        if (stock == null) {
            this.stock = 0;
            return;
        }
        if (stock < 0) {
            throw new IllegalArgumentException("stock（库存）不能为负数");
        }
        this.stock = stock;
    }

    // toString（调试用）
    @Override
    public String toString() {
        return "Product{" +
                "productId=" + productId +
                ", name='" + name + '\'' +
                ", category='" + category + '\'' +
                ", price=" + price +
                ", stock=" + stock +
                '}';
    }
}